1
Ошибки ручного управления памятью
AI013Lesson 5
00:00

Ручное управление памятью через new и delete создает хрупкое "договор ответственности". Программист должен точно предсказать каждый путь выполнения — включая ранние выходы и исключения — чтобы гарантировать освобождение ресурсов. Такой подход подвержен системным сбоям.

Системные сбои

  • Ловушка утечек: В сложной логике (if-else, switch), если не каждому оператору new соответствует delete приводит к постепенному снижению производительности системы.
  • Нарушения указателей: Ошибки, такие как висячие указатели (доступ к памяти после освобождения) или повторное освобождение вызывают неопределённое поведение и уязвимости безопасности.
  • Безопасность при исключениях: Если исключение возникает между выделением и освобождением памяти, то delete выполняется полностью пропускается.
new char[]XРанний выход (утечка)XИсключение (утечка)Защитники ()• std::unique_ptr• std::shared_ptr• std::weak_ptr

Эволюция эволюции

C++11/14 переработали заголовок <memory> для отказа от «голых указателей» в пользу автоматизированных моделей владения, которые обеспечивают безопасность на уровне компилятора.

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>